home *** CD-ROM | disk | FTP | other *** search
-
-
-
- TTTThhhhrrrreeeeaaaadddd::::::::QQQQuuuueeeeuuuueeee((((3333))))22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) TTTThhhhrrrreeeeaaaadddd::::::::QQQQuuuueeeeuuuueeee((((3333))))
-
-
-
- NNNNAAAAMMMMEEEE
- Thread::Queue - thread-safe queues
-
- SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
- use Thread::Queue;
- my $q = new Thread::Queue;
- $q->enqueue("foo", "bar");
- my $foo = $q->dequeue; # The "bar" is still in the queue.
- my $foo = $q->dequeue_nb; # returns "bar", or undef if the queue was
- # empty
- my $left = $q->pending; # returns the number of items still in the queue
-
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- A queue, as implemented by Thread::Queue is a thread-safe
- data structure much like a list. Any number of threads can
- safely add elements to the end of the list, or remove
- elements from the head of the list. (Queues don't permit
- adding or removing elements from the middle of the list)
-
- FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNNSSSS AAAANNNNDDDD MMMMEEEETTTTHHHHOOOODDDDSSSS
- new The new function creates a new empty queue.
-
- enqueue LIST
- The enqueue method adds a list of scalars on to the
- end of the queue. The queue will grow as needed to
- accomodate the list.
-
- dequeue The dequeue method removes a scalar from the head of
- the queue and returns it. If the queue is currently
- empty, dequeue will block the thread until another
- thread enqueues a scalar.
-
- dequeue_nb
- The dequeue_nb method, like the dequeue method,
- removes a scalar from the head of the queue and
- returns it. Unlike dequeue, though, dequeue_nb won't
- block if the queue is empty, instead returning
- undef.
-
- pending The pending method returns the number of items still
- in the queue. (If there can be multiple readers on
- the queue it's best to lock the queue before
- checking to make sure that it stays in a consistent
- state)
-
- SSSSEEEEEEEE AAAALLLLSSSSOOOO
- the _T_h_r_e_a_d manpage
-
- =cut
-
- sub new {
-
-
-
- Page 1 (printed 10/23/98)
-
-
-
-
-
-
- TTTThhhhrrrreeeeaaaadddd::::::::QQQQuuuueeeeuuuueeee((((3333))))22223333////JJJJuuuullll////99998888 ((((ppppeeeerrrrllll 5555....000000005555,,,, ppppaaaattttcccchhhh 00002222)))) TTTThhhhrrrreeeeaaaadddd::::::::QQQQuuuueeeeuuuueeee((((3333))))
-
-
-
- my $class = shift;
- return bless [@_], $class; }
-
- sub dequeue {
- use attrs _q_w(locked method);
- my $q = shift;
- cond_wait $q until @$q;
- return shift @$q; }
-
- sub dequeue_nb {
- use attrs _q_w(locked method);
- my $q = shift;
- if (@$q) {
- return shift @$q;
- } else {
- return undef;
- } }
-
- sub enqueue {
- use attrs _q_w(locked method);
- my $q = shift;
- _p_u_s_h(@$q, @_) and cond_broadcast $q; }
-
- sub pending {
- use attrs _q_w(locked method);
- my $q = shift;
- return _s_c_a_l_a_r(@$q); }
-
- 1;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 2 (printed 10/23/98)
-
-
-
-